home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / ainet / t1static.c < prev    next >
C/C++ Source or Header  |  1996-10-15  |  6KB  |  182 lines

  1. /* ----------------------------------------------------------------------- *
  2.  *                                                                         *
  3.  *    (C) Copyright 1996 by:  aiNet                                        *
  4.  *                                        Trubarjeva 42, SI-3000 Celje                 *
  5.  *                                        Europe, Slovenia                             *
  6.  *     All Rights Reserved                                                 *
  7.  *                                                                         *
  8.  *     Subject: C code for single vector prediction.                       *
  9.  *     File:    T1Static - The XOR problem created by XOR.CSV file         *
  10.  *                                                                         *
  11.  * ----------------------------------------------------------------------- */
  12.  
  13. /*--------------------------------------------------------------------------
  14.     Here it will be shown how we can colve the XOR problem using
  15.     aiNet C functions
  16.  
  17.     The XOR problem:
  18.     ================
  19.         Number of model vectors: 4
  20.              Number of variables: 3
  21.      Number of input variables: 3
  22.          Any discrete variables: NONE
  23.  
  24.         Model vectors:  Inp,Inp,Out
  25.                   row 1:  1,  1,  0
  26.                   row 2:  1,  0,  1
  27.                   row 3:  0,  1,  1
  28.                   row 4:  0,  0,  0
  29.  
  30.     Test vectors (vectors which will be used in prediction) together with
  31.     penalty coefficient and penalty method.
  32.  
  33.          Prediction vectors:  Inp  Inp  Out
  34.                           prd 1:  0.9  0.1  ??
  35.                           prd 2:  0.1  0.9  ??
  36.                           prd 3:  0.2  0.2  ??
  37.                           prd 4:  0.7  0.7  ??
  38.  
  39.          Penalty coeffcient: 0.3
  40.          Penalty methods: STATIC
  41.  
  42.     NOTE: Selected penalty coefficients are in no case optimal.
  43.             They were selected randomly, to perform a few tests.
  44.             The test results were compared with the results calculated by
  45.             the main aiNet 1.14 application.
  46.  
  47.     --------------------------------------------------------------------------
  48.     Results (rounded at fourth decimal):
  49.     --------------------------------------------------------------------------
  50.  
  51.          Penalty cefficient: 0.3
  52.          Penalty method:     STATIC
  53.                                                   (RESULT)
  54.          Prediction vectors:  Inp  Inp  (  Out )
  55.                           prd 1:  0.9  0.1  (1.0000)
  56.                           prd 2:  0.1  0.9  (1.0000)
  57.                           prd 3:  0.2  0.2  (0.0007)
  58.                           prd 4:  0.7  0.7  (0.0096)
  59.  
  60.     -------------------------------------------------------------------------*/
  61.  
  62. /*
  63.  * This file assumes that ainetxx.dll will be statically binded to exe,
  64.  * which means that AI_STATIC_DLL_BINDING flag must be defined and
  65.  * ainetxx.lib must be included in the linking process.
  66.  *
  67.  * IMPORTANT NOTE for ainet32.dll:
  68.  * It has been reported that only Borland C++ V5.0 compiler
  69.  * can bind ainet32.lib correctly. If you use any other compiler, you
  70.  * should load ainet32.dll at run time; which means this example will
  71.  * not work until you modify it. See T2RunTim.C and T3RunTim.C to find out
  72.  * how run time binding is archived.
  73.  */
  74.  
  75. #if !defined(__BORLANDC__)
  76. #error Only Borland C++ v5.0 will compile this correctly.
  77. #endif
  78.  
  79. #define AI_STATIC_DLL_BINDING
  80. #include "ainetdll.h"
  81.  
  82. #include <stdio.h>
  83. #include <stdlib.h>
  84.  
  85. void main()
  86. {
  87.     /*
  88.      * Here we present the simplest way to create the model. It will
  89.      * be read from a CSV file which was created by aiNet application.
  90.      */
  91.  
  92.     int i;
  93.     int version;
  94.     aiModel* model = NULL;
  95.     float predict[4][3] = { { 0.9,0.1, 999 },   /* vectors to be predicted */
  96.                                     { 0.1,0.9, 999 },
  97.                                     { 0.2,0.2, 999 },
  98.                                     { 0.7,0.7, 999 } };
  99.  
  100.     /*
  101.      * Title
  102.      */
  103.  
  104.     version = aiGetVersion();
  105.     printf( "\naiNetDLL version %i.%i! (C) Copyright by aiNet, 1996",
  106.               version/100, version%100 );
  107.     printf( "\n---------------------------------------------------\n" );
  108.  
  109.     /*
  110.      * Register DLL
  111.      */
  112.  
  113.     aiRegistration( "Your registration name", "Your code" );
  114.  
  115.     /*
  116.      * Setup the model - read the csv file.
  117.      */
  118.  
  119.     model = aiCreateModelFromCSVFile( "xor.csv" );
  120.     if(!model) {
  121.         printf( "\nError: Something went wrong during model creation!" );
  122.         exit(EXIT_FAILURE);
  123.     }
  124.  
  125.     /*
  126.      * Output the model
  127.      */
  128.  
  129.     printf( "\n             Model name: aiNet DLL test 1 (XOR.CSV)" );
  130.     printf( "\nNumber of model vectors: %i", aiGetNumberOfModelVectors(model));
  131.     printf( "\n    Number of variables: %i", aiGetNumberOfVariables(model));
  132.     printf( "\n         Variable names: A,   B,   A xor B" );
  133.     printf( "\n          Discrete flag: %i,   %i,   %i",
  134.               aiGetDiscreteFlag(model,1),
  135.               aiGetDiscreteFlag(model,2),
  136.               aiGetDiscreteFlag(model,3) );
  137.     for( i=1; i<=aiGetNumberOfModelVectors(model); i++ ) {
  138.         printf( "\n\t\t\t %3.1lf, %3.1lf, %3.1lf",
  139.                   aiGetVariable(model, i,1),
  140.                   aiGetVariable(model, i,2),
  141.                   aiGetVariable(model, i,3) );
  142.     }
  143.  
  144.     /*
  145.      * Normalize the model
  146.      */
  147.  
  148.     aiNormalize(model,NORMALIZE_REGULAR);
  149.  
  150.     /*
  151.      * Prediction: Pen. coefficient = 0.30, Pen. method = STATIC
  152.      * This test has static penalty coefficient 0.30
  153.      */
  154.  
  155.     printf( "\n\n  Penalty coefficient: 0.30" );
  156.     printf(   "\n       Penalty method: STATIC" );
  157.     printf(   "\n\t A(inp), B(inp), A xor B(out)" );
  158.     for ( i=0; i<4; i++ ) {
  159.         aiPrediction( model, predict[i], 0.30, PENALTY_STATIC );
  160.         printf( "\n\t%7.4f, %7.4f, %7.4f",
  161.                   predict[i][0],predict[i][1],predict[i][2] );
  162.     }
  163.  
  164.     /*
  165.      * Denormalize the model (in this case it is not necessary)
  166.      */
  167.  
  168.     aiDenormalize(model);
  169.  
  170.     /*
  171.      * We must call the aiDeleteModel function here since the model
  172.      * was allocated dynamicaly using the aiCreateModelFromCSVFile function.
  173.      */
  174.  
  175.     aiDeleteModel(model);
  176.  
  177.     printf( "\n\nEnd." );
  178.     exit(EXIT_SUCCESS);
  179. }
  180.  
  181. /* THE END */
  182.